home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / bin / smbclient.py < prev    next >
Text File  |  2006-06-30  |  5KB  |  166 lines

  1. #!/usr/bin/python
  2.  
  3. # Copyright (c) 2002, Core SDI S.A., Argentina
  4. # All rights reserved
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. Neither name of the Core SDI S.A. nor the names of its contributors
  14. #    may be used to endorse or promote products derived from this software
  15. #    without specific prior written permission.
  16. #
  17. # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18. # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19. # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21. # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22. # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23. # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24. # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. #
  28.  
  29. # mini shell to be used with impacket
  30. #
  31.  
  32. import sys
  33. import string
  34. from impacket import smb
  35.  
  36.  
  37. class MiniImpacketShell:    
  38.     def __init__(self):
  39.         self.smb = None
  40.         self.tid = None
  41.         self.pwd = ''
  42.         self.share = None
  43.  
  44.     def eval(self, s):
  45.         l = string.split(s, ' ')
  46.         cmd = l[0]
  47.         
  48.         try:        
  49.             f = MiniImpacketShell.__dict__[cmd]
  50.             l[0] = self
  51.             f(*l)
  52.         except Exception, e:
  53.             print "exception! %s" % e
  54.  
  55.     def run(self):
  56.         s = raw_input('# ')
  57.         while s:
  58.             if s == 'exit':
  59.               break
  60.             self.eval(s)
  61.             s = raw_input('# ')
  62.  
  63.     def help(self):
  64.         print """
  65.  open {host,port} - opens a SMB connection against the target host/port
  66.  login {username,passwd} - logs into the current SMB connection
  67.  login_hash {username,lmhash,nthash} - logs into the current SMB connection using the password hashes
  68.  logoff - logs off
  69.  shares - list available shares
  70.  use {sharename} - connect to an specific share
  71.  cd {path} - changes the current directory to {path}
  72.  pwd - shows current remote directory
  73.  ls {wildcard} - lists all the files in the current directory
  74.  rm {file} - removes the selected file
  75.  mkdir {dirname} - creates the directory under the current path
  76.  rmdir {dirname} - removes the directory under the current path
  77.  put {filename} - uploads the filename into the current path
  78.  get {filename} - downloads the filename from the current path
  79.  close - closes the current SMB Session
  80.  exit - terminates the server process (and this session)
  81.  
  82.  An empty line finishes the session
  83.  NOTE: the server is not terminated, although it is left unusable
  84. """
  85.  
  86.     def open(self,host,port):
  87.         self.smb = smb.SMB("*SMBSERVER", host, port)
  88.  
  89.     def login(self,username, password):
  90.         self.smb.login(username, password)
  91.  
  92.     def login_hash(self,username, lmhash, nthash):
  93.         self.smb.login(username, '', lmhash=lmhash, nthash=nthash)
  94.  
  95.     def logoff(self):
  96.         self.smb.logoff()
  97.  
  98.     def shares(self):
  99.         for share in self.smb.list_shared():
  100.             print "%s" % share.get_name()
  101.  
  102.     def use(self,sharename):
  103.         self.share = sharename
  104.         self.tid = self.smb.tree_connect(sharename)
  105.  
  106.     def cd(self, path):
  107.         p = string.replace(path,'/','\\')
  108.         if p[0] == '\\':
  109.            self.pwd = path
  110.         else:
  111.            self.pwd += '/' + path
  112.  
  113.     def pwd(self):
  114.         print self.pwd
  115.  
  116.     def ls(self, wildcard = None):
  117.         if wildcard == None:
  118.            pwd = self.pwd + '/*'
  119.         else:
  120.            pwd = self.pwd + '/' + wildcard
  121.         for f in self.smb.list_path(self.share, pwd):
  122.            print "%s" % f.get_longname()
  123.  
  124.     def rm(self, filename):
  125.         f = self.pwd + '/' + filename
  126.         file = string.replace(f,'/','\\')
  127.         self.smb.remove(self.share, file)
  128.  
  129.     def mkdir(self, path):
  130.         p = self.pwd + '/' + path
  131.         pathname = string.replace(p,'/','\\')
  132.         self.smb.mkdir(self.share,pathname)
  133.  
  134.     def rmdir(self, path):
  135.         p = self.pwd + '/' + path
  136.         pathname = string.replace(p,'/','\\')
  137.         self.smb.rmdir(self.share, pathname)
  138.  
  139.     def put(self, filename):
  140.         fh = open(filename, 'rb')
  141.         f = self.pwd + '/' + filename
  142.         pathname = string.replace(f,'/','\\')
  143.         self.smb.stor_file(self.share, pathname, fh.read)
  144.         fh.close()
  145.  
  146.     def get(self, filename):
  147.         fh = open(filename,'wb')
  148.         f = self.pwd + '/' + filename
  149.         pathname = string.replace(f,'/','\\')
  150.         self.smb.retr_file(self.share, pathname, fh.write)
  151.         fh.close()
  152.  
  153.     def close(self):
  154.         self.smb.close();
  155.  
  156. def main():
  157.     shell = MiniImpacketShell()
  158.     shell.run()
  159.  
  160. if __name__ == "__main__":
  161.     main()
  162.  
  163.